草庐IT

Python NotImplemented 常量

全部标签

c++ - __PRETTY_FUNCTION__ 在常量表达式中

请引用这段代码:#include#includeconstexprstd::size_tstrlen(charconst*s){std::size_tn=0;while(*s++!='\0')++n;returnn;}templatestructX{};intmain(){constexprautopf=__PRETTY_FUNCTION__;//gccok;clangok;(1)static_assert(std::string_view(__PRETTY_FUNCTION__)==std::string_view("intmain()"));//gccok;clangok;(2)X

c++ - 在抽象接口(interface)中不转移所有权的指针 vector 的常量正确访问器

我正在从头开始设计一个库,并希望获得尽可能良好的公共(public)API。我希望编译器因滥用而对我大喊大叫。因此,我给自己制定了以下规则:整个库的真实(即深入和完整)const正确性所有东西(局部变量、成员变量、成员函数),预计不会改变的都被声明为const.该常量性应传播到所有嵌套成员和类型。明确和表达所有权根据C++核心指南,我将其定义为(iff在当且仅当的数学意义上):函数参数是unique_ptr或T&&iff函数正在使用它(即取得所有权)函数参数是shared_ptr或Tconst&iff函数只读取它函数参数是shared_ptr或T&iff函数正在修改它而不取得所有权返回

c++ - 如何以程序员愉快的方式使用 CUDA 常量内存?

我正在使用CUDA框架开发一个数字处理应用程序。我有一些所有线程都应该可以访问的静态数据,所以我把它放在常量内存中,如下所示:__device____constant__CaseParamsdeviceCaseParams;我使用调用cudaMemcpyToSymbol将这些参数从主机传输到设备:voidcopyMetaData(CaseParams*caseParams){cudaMemcpyToSymbol("deviceCaseParams",caseParams,sizeof(CaseParams));}有效。无论如何,似乎(通过反复试验,以及阅读网上的帖子)出于某种病态的原因

c++ - 树的常量和非常量版本的访问者模式

关于树的访问者模式,我遇到了代码重复问题。目前的情况如下:我有一棵树,由两个不同的节点类组成,即叶子和非叶子。此外,我有两个访问者基类,除了一个访问常量树和另一个访问非常量树之外,它们看起来非常相似。具体访问者必须执行的实际操作与节点的具体类型无关。我举一个简短的例子:classVisitor;classConstVisitor;classNode{public:virtualvoidaccept(Visitor&)=0;virtualvoidaccept(ConstVisitor&)const=0;};classLeaf:publicNode{virtualvoidaccept(Vi

C++11 向后兼容性(空整数常量到指针的转换)

C++标准允许将零整数常量隐式转换为任何类型的指针。下面的代码是无效的,因为v的值在这里不是常量:float*foo(){intv=0;returnv;//Error}但是下面的代码是正确的:float*foo(){constintv=0;returnv;//OkinC++98mode,errorinC++11mode}问题是:为什么gcc和clang(试过不同的版本)在c++98/03模式下编译代码正确但是在c++11/14模式下编译时返回警告/错误(-std=c++11)?我试图在C++11工作草案PDF中找到更改,但没有成功。Intel编译器16.0和VS2015编译器在这两种情

c++ - 枚举类计算常量

其实这个“问题”感觉起来极其简单。在计算图标偏移量时,我想到了以下方法:namespaceIcons{structIconSet{constexprIconSet(size_tbase_offset)noexcept:base_offset_(base_offset),icon(base_offset*3),iconSmall(icon+1),iconBig(icon+2){}size_ticon;size_ticonSmall;size_ticonBig;size_tbase_offset_;constexprsize_tnext()const{returnbase_offset_+

c++ - C++0x 中的纯/常量函数

在C++98/C++03中,没有pure/constfunctionkeywords在语言中。这在C++0x中有变化吗?如果是这样,是否可以在函数对象(std::function)上设置这样的标志?所以我可以传递一些函数指针或lambda函数,并额外提供它是一个纯/const函数的信息?被调用函数可能具有针对此类函数的优化执行路径。有什么方法可以检查给定的函数是否是纯函数/常量?IE。例如,如果如上所述std::function上有这样的标志,我可能只检查该标志。但也许还有更通用的方法。如果没有改变,为什么不呢?我认为获得这样的支持可能会非常有用。有没有关于它的公开提案?

c++ - 如何复制(或交换)包含引用或常量成员的类型的对象?

我试图解决的问题是制作包含引用和常量数据成员的对象的容器,例如std::vector:structFoo;structBar{Bar(Foo&foo,intnum):foo_reference(foo),number(num){}private:Foo&foo_reference;constintnumber;//Mutablememberdataelided};structBaz{std::vectorbar_vector;};这不会按原样工作,因为类Foo的默认赋值运算符由于引用成员foo_reference和const成员而无法构建编号。一个解决方案是将foo_reference

c++ - MSVC constexpr 函数 'xyz' 无法生成常量表达式

我做了一个函数,将多个较小的值连接成一个较大的值,同时保留值的二进制表示(例如,从多个unsignedcharr构建一个intargb,g,b,a).我知道我也可以通过移动值来实现这一点,但这不是这个问题的问题。但是,如果我使用该函数从这些值实际生成一个整数,则msvc会抛出一个编译器错误:errorC3615:constexprfunction'Color::operatorint'cannotresultinaconstantexpressionnote:failurewascausedbycallofundefinedfunctionoronenotdeclared'conste

c++ - C++ 中作为右值的常量(11)

为什么constint不是C++(11)中的R值?我认为R值是不能在左侧的“任何东西”,常数可以满足这一点。此代码失败:intf(int&&x){return100;}voidg(){constintx=1;f(x);}error:invalidinitializationofreferenceoftype‘int&&’fromexpressionoftype‘constint’ 最佳答案 好的,表达式分为三类1:代表具有身份且无法移动的对象;那些代表具有身份并且可以从中移动的对象;那些表示没有标识且可以从中移动的对象;第一个称为左